from PIL import Image
from openai import OpenAI
import base64
import os
import json
from IPython.display import display, Markdown  # 添加缺少的导入

# 设置图像路径和提示词（修改为要求的格式）
image_path = "C:/Users/zhoujiaqing/Desktop/302/用QWen3进行OCR/5d8933add5f08a5933965bef43936d63.png"
prompt = "识别图像中所有文本内容，以行为单位，并以JSON格式输出为[{'bbox_2d': [x1, y1, x2, y2], 'text_content': '文本内容'}, ...]。"

# 图像编码函数
def encode_image(img_path):
    with open(img_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

# 使用基于API的方法进行OCR
# 请确保从阿里云百炼平台获取有效的API密钥
api_key = os.environ.get('DASHSCOPE_API_KEY', 'sk-3fe722ea8cd249beb3bf3da52099484b')

if api_key.startswith('sk-请替换'):
    print("警告：请替换为有效的API密钥！")
    print("获取地址：https://bailian.console.alibabacloud.com/?apiKey=1")

# 创建OpenAI客户端
client = OpenAI(
    api_key="sk-3fe722ea8cd249beb3bf3da52099484b",  # 注意：这仍然是无效的示例密钥
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 在列表外部定义变量
min_pixels = 512*32*32
max_pixels = 2048*32*32
image = Image.open(image_path)
width, height = image.size

# 准备消息和图像数据
base64_image = encode_image(image_path)
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image_url",
                "min_pixels": min_pixels,
                "max_pixels": max_pixels,
                "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"},
            },
            {"type": "text", "text": prompt},
        ],
    }
]

# 调用API进行OCR
print("正在调用API进行OCR识别，请稍候...")
try:
    completion = client.chat.completions.create(
        model="qwen3-vl-235b-a22b-instruct",
        messages=messages,
    )
    
    # 获取响应结果
    response = completion.choices[0].message.content
    
    # 显示结果（移动到这里，因为response现在已定义）
    display(Markdown(response))
    
    # 打印原始文本结果
    print("\n识别结果：")
    print(response)
    
except Exception as e:
    print(f"API调用失败：{e}")
    print("请检查：")
    print("1. API密钥是否正确（当前使用的是示例密钥）")
    print("2. 您的账号是否有足够的API额度")
    print("3. 网络连接是否正常")